﻿using System;

namespace enyo
{
    public abstract class DomNode : Component
    {
        public bool Showing { get; set; }
        public bool Prepend { get; set; }

        /// <summary>
        /// Adds CSS class name to the className attribute of this object.
        /// </summary>
        /// <param name="className"></param>
        public void AddClass(string className)
        {
        }

        /// <summary>
        /// Adds or removes CSS class name from the className attribute of this object based on the value of trueToAdd.
        /// </summary>
        /// <param name="className"></param>
        /// <param name="trueToAdd"></param>
        public void AddRemoveClass(string className, bool trueToAdd)
        {
        }

        /// <summary>
        /// Adds CSS styles to the set of styles assigned to this object.
        /// styles is a string containing CSS styles in text format.
        /// </summary>
        /// <param name="?"></param>
        public void AddStyles(string styles)
        {
        }

        /// <summary>
        /// Applies a single style value to this object.
        /// e.g. ApplyStyle("z-index", 4);
        /// You can remove a style (restore it to default) by setting its value to null.
        /// </summary>
        /// <param name="style"></param>
        /// <param name="value"></param>
        public void ApplyStyle(string style, object value)
        {
        }

        /// <summary>
        /// Returns the className attribute.
        /// </summary>
        /// <returns></returns>
        public string GetClassName()
        {
            return null;
        }

        /// <summary>
        /// Returns true if the className attribute contains a class matching className.
        /// </summary>
        /// <param name="className"></param>
        /// <returns></returns>
        public bool HasClass(string className)
        {
            return false;
        }

        /// <summary>
        /// Returns the DOM node that has been created and rendered for the object. 
        /// If this node doesn't exist, returns null. After this call, the node property will be valid and can be checked directly.
        /// If hasNode() isn't null, the node property refers to a valid DOM node; otherwise, the node property should not be accessed.
        /// </summary>
        /// <returns></returns>
        public System.Html.DOM.HtmlElement HasNode()
        {
            return null;
        }

        /// <summary>
        /// Removes CSS class name inClass from the className attribute of this object.
        /// Using a compound class name is supported, but the name is treated atomically. For example, given "a b c", removeClass("a b") will produce "c", but removeClass("a c") will produce "a b c".
        /// </summary>
        /// <param name="className">Must have no leading or trailing spaces.</param>
        public void RemoveClass(string className)
        {
        }

        /// <summary>
        /// Sets the value of an attribute on this object. Set value to null to remove an attribute.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="value"></param>
        public void SetAttribute(string name, object value)
        {
        }

        /// <summary>
        /// Replaces the className attribute. The className attribute represents the CSS classes assigned to this object. 
        /// Note that a className can be a string that contains multiple classes. 
        /// The className nomenclature comes from the DOM standards.
        /// </summary>
        /// <param name="className"></param>
        public void SetClassName(string className)
        {
        }

        /// <summary>
        /// Replaces the set of CSS styles assigned to this object.
        /// </summary>
        /// <param name="style">A string containing CSS styles in text format.</param>
        public void SetStyle(string style)
        {
        }

        public System.Html.DOM.HtmlElement Node;

        public void SetParentNode(System.Html.DOM.HtmlElement node)
        {
        }
    }
}
